'use strict'
var __awaiter =
  (this && this.__awaiter) ||
  function (thisArg, _arguments, P, generator) {
    function adopt(value) {
      return value instanceof P
        ? value
        : new P(function (resolve) {
            resolve(value)
          })
    }
    return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) {
        try {
          step(generator.next(value))
        } catch (e) {
          reject(e)
        }
      }
      function rejected(value) {
        try {
          step(generator['throw'](value))
        } catch (e) {
          reject(e)
        }
      }
      function step(result) {
        result.done
          ? resolve(result.value)
          : adopt(result.value).then(fulfilled, rejected)
      }
      step((generator = generator.apply(thisArg, _arguments || [])).next())
    })
  }
var __generator =
  (this && this.__generator) ||
  function (thisArg, body) {
    var _ = {
        label: 0,
        sent: function () {
          if (t[0] & 1) throw t[1]
          return t[1]
        },
        trys: [],
        ops: [],
      },
      f,
      y,
      t,
      g
    return (
      (g = { next: verb(0), throw: verb(1), return: verb(2) }),
      typeof Symbol === 'function' &&
        (g[Symbol.iterator] = function () {
          return this
        }),
      g
    )
    function verb(n) {
      return function (v) {
        return step([n, v])
      }
    }
    function step(op) {
      if (f) throw new TypeError('Generator is already executing.')
      while ((g && ((g = 0), op[0] && (_ = 0)), _))
        try {
          if (
            ((f = 1),
            y &&
              (t =
                op[0] & 2
                  ? y['return']
                  : op[0]
                  ? y['throw'] || ((t = y['return']) && t.call(y), 0)
                  : y.next) &&
              !(t = t.call(y, op[1])).done)
          )
            return t
          if (((y = 0), t)) op = [op[0] & 2, t.value]
          switch (op[0]) {
            case 0:
            case 1:
              t = op
              break
            case 4:
              _.label++
              return { value: op[1], done: false }
            case 5:
              _.label++
              y = op[1]
              op = [0]
              continue
            case 7:
              op = _.ops.pop()
              _.trys.pop()
              continue
            default:
              if (
                !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) &&
                (op[0] === 6 || op[0] === 2)
              ) {
                _ = 0
                continue
              }
              if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
                _.label = op[1]
                break
              }
              if (op[0] === 6 && _.label < t[1]) {
                _.label = t[1]
                t = op
                break
              }
              if (t && _.label < t[2]) {
                _.label = t[2]
                _.ops.push(op)
                break
              }
              if (t[2]) _.ops.pop()
              _.trys.pop()
              continue
          }
          op = body.call(thisArg, _)
        } catch (e) {
          op = [6, e]
          y = 0
        } finally {
          f = t = 0
        }
      if (op[0] & 5) throw op[1]
      return { value: op[0] ? op[1] : void 0, done: true }
    }
  }
Object.defineProperty(exports, '__esModule', { value: true })
exports.downloadFileWithBlob = exports.downloadBlobFile = void 0
var downloadBlobFile = function (res, fileName) {
  var blob = res.data
  // console.log(blob);
  var blobUrl = URL.createObjectURL(blob)
  var a = document.createElement('a') // 转换完成，创建一个a标签用于下载
  a.style.display = 'none'
  // 设置href属性为文件路径，download属性可以设置文件名称
  a.href = blobUrl
  a.download = fileName
  document.body.appendChild(a)
  a.click()
  URL.revokeObjectURL(blobUrl)
  a.remove()
}
exports.downloadBlobFile = downloadBlobFile
var downloadFileWithBlob = function (res, name, type) {
  if (type === void 0) {
    type = 'decode'
  }
  return __awaiter(void 0, void 0, void 0, function () {
    var temp, fileName, downloadType, opts, fileHandle, writableFileStream, e_1
    var _a
    return __generator(this, function (_b) {
      switch (_b.label) {
        case 0:
          temp =
            (_a = res.headers['content-disposition']) === null || _a === void 0
              ? void 0
              : _a.split(';')[1].split('=')[1]
          fileName = name
          if (temp) {
            // fileName = decode(temp, "utf8");
            // fileName = convertToUTF8(temp);
            fileName = convertToString(temp)
            // console.log(fileName)
            if (fileName.indexOf("utf-8''") > -1) {
              fileName = fileName.replace("utf-8''", '')
            }
            if (fileName.indexOf('utf-8') > -1) {
              fileName = fileName.replace('utf-8', '')
            }
          }
          downloadType = false
          if (!downloadType) return [3 /*break*/, 8]
          opts = {
            suggestedName: fileName,
            types: [
              {
                description: '导出表格数据',
                accept: { 'application/vnd.ms-excel': ['.xlsx'] },
              },
            ],
          }
          _b.label = 1
        case 1:
          _b.trys.push([1, 6, , 7])
          return [4 /*yield*/, window.showSaveFilePicker(opts)]
        case 2:
          fileHandle = _b.sent()
          return [4 /*yield*/, fileHandle.createWritable()]
        case 3:
          writableFileStream = _b.sent()
          return [4 /*yield*/, writableFileStream.write(res.data)]
        case 4:
          _b.sent()
          return [4 /*yield*/, writableFileStream.close()]
        case 5:
          _b.sent()
          return [3 /*break*/, 7]
        case 6:
          e_1 = _b.sent()
          if (!String(e_1).includes('aborted')) {
            ;(0, exports.downloadBlobFile)(res, fileName)
          }
          return [3 /*break*/, 7]
        case 7:
          return [3 /*break*/, 9]
        case 8:
          ;(0, exports.downloadBlobFile)(res, fileName)
          _b.label = 9
        case 9:
          return [2 /*return*/]
      }
    })
  })
}
exports.downloadFileWithBlob = downloadFileWithBlob
var convertToUTF8 = function (content) {
  var surrogate = encodeURIComponent(content)
  var result = ''
  for (var i = 0; i < surrogate.length; ) {
    var character = surrogate[i]
    i += 1
    if (character == '%') {
      var hex = surrogate.substring(i, (i += 2))
      if (hex) {
        result += String.fromCharCode(parseInt(hex, 16))
      }
    } else {
      result += character
    }
  }
  return result
}
var convertToString = function (uriStr) {
  return decodeURI(uriStr)
}
